<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>
    第五课.
    数组
  </title>
</head>
<body>

程序 = 数据结构 + 算法;
原始类型：数据保存在本地
引用类型：数据保存在堆中，堆中又地址指向实际数据


null: 主动释放当前对象
undefined: 专用于自动初始化任何未赋值的对象
垃圾回收程序：随程序后台运行


Array 会主动扩容和截断, 截断后的数据依旧会保存在内存中,不能被找到,也无法被回收
arr.length
arr.toString() , arr.valueOf() 相同
var str = arr.join('分隔符') 将数组转为字符串，可自定义分隔符
var newarr = arr.concat(元素,[]) 将参数拆散成元素添加到数组中,会生成一个新的数组
var subArr = arr.slice(start,end+1) 截取数组下标从start开始，到end元素，生成子数组对象 *含头不含尾*

arr.splice(start,count) !删除!
arr.splice(start,count,值1,值2...) !替换!
arr.splice(start,0,值1,值2...) !插入!
会返回删除元素组成的数组

arr.reverse() 颠倒所有数组元素
arr.sort() 数组排序 默认升序 默认转成字符串排序


栈：变量不归垃圾回收站管
堆：
关联数组：example - arr['name']='Toma';
冒泡排序


<script>
  // @example 遍历数组
  var week = [1, 2];
  for (var m = 0; m < week.length; m++) {
    week[m] = '星期' + week[m];
  }

  // @example forin | 关联数组
  var data = {'熟悉': 1, '那种': 2};
  for (var key in data) {
    console.log(key + ':' + data[key]);
  }

  // @example 冒泡算法~
  // 第一轮计算
  //  var arr = [5,7,6,8,1,9,4,3,2];
  //  for(var i=0;i<arr.length-1;i++){
  //    var curr = arr[i];
  //    var next = arr[i+1];
  //    if(curr>next){
  //      var box = arr[i];
  //      arr[i]=arr[i+1];
  //      arr[i+1]=box;
  //    }
  //  }
  //  console.log(arr);
  // 第n次计算
  var num = [5, 7, 6, 8, 1, 9, 4, 3, 2];
  for (var n = 1; n < num.length; n++) {
    for (var i = 0; i < num.length - n; i++) {
      var curr = num[i];
      var next = num[i + 1];
      if (curr > next) {
        var pro = num[i];
        num[i] = num[i + 1];
        num[i + 1] = pro;
      }
    }
  }
  console.log(arr);

  //@example splice()
  var gat = [1, 2, 3, 5];
  gat.splice(1, 1);
</script>
</body>
</html>